<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 
    function Queue(){
      // 1 存储数据
      var items = []
      this.items = items
      // 2 向队列的尾部添加一个元素
      this.enqueue = function(item){
        items.push(item)
      }
      // 3 从队列的头部删除一个元素
      this.dequeue = function(){
        return items.shift()
      }
      // 4 返回队列的头部元素查看
      this.head  = function(){
        return items[0]
      }
      // 5 返回队列的大小
      this.size = function(){
        return items.length
      }
      // 6 返回队列是否为空
      this.isEmpty = function(){
        return items.length===0
      }
      // 7 清空队列
      this.clear = function(){
        items = []
      }
    }

    // 题目1 约瑟夫环数
    // 有一个数组a[100]存放0-99，要求每隔两个数删掉一个数，到末尾时循环至开头继续进行，求最后一个被删除的数是多少


    function del_ring(arr){
      
      const queue = new Queue()
      for (let i = 0; i < arr.length; i++) {
        // 所有的数从尾部添加入队列
        queue.enqueue(arr[i])
      }
      // 定义一个标记的数用于判断是否是要删除的元素
      let  index=0
      while(queue.size()!=1){
        // 弹出队列的头部元素
        const item = queue.dequeue()
        index+=1
        console.log(index,item)
        //通过index判断，  每隔2个数就删除一个元素，不是就重新添加到队列尾部。
        if(index%3!=0){
          queue.enqueue(item)
        }
      }
      console.log(arr,queue,index)
      return queue.head() 
    }
    var lastNum = del_ring([1,2,3,4,5,6,7,8,9])
    console.log(lastNum)
  </script>
</body>
</html>